package com.osgix.common.orm.ibatis;

import java.io.Serializable;
import java.util.List;

public interface EntityDao<T, PK extends Serializable> {

	/** 查询主键返回唯一对象 */
	public T getById(PK id);

	public T findUnique(Object param);

	public Long getCount();

	/** 查询SQL返回唯一对象 */
	// public T selectOne(String sql);

	/** 查询绑定参数的SQL返回唯一对象 */
	// public T selectOne(String sql, Object param);

	/** 根据主键删除持久化对象 */
	public void deleteById(PK id);

	/** 删除此持久化对象 */
	public void delete(T entity);

	/** 持久化此对象 */
	public void save(T entity);

	/** 更新持久化此对象 */
	public void update(T entity);

	/** 保存或更新持久化对象 */
	public void saveOrUpdate(T entity);

	/** 刷新新持久化此对象状态 */
	public void flush();

	/** 查找所有持久化此对象 并排序 
	 * @param sortConditions 排序参数数组
	 * 例： String[]{user_age desc, user_level asc}
	 * @return
	 */
	public List<T> findAll(String... sortConditions);

	/**
	 * 分页查找
	 * @param pageRequest 分页参数,查询条件,排序条件
	 * @return
	 */
	public Page<T> findPage(PageRequest pageRequest);

	/** 查询SQL查找持久化此对象 */
	// public List<T> selectList(final String sql);

}
